'use strict'
const router=require('koa-router')()
const fs=require('fs')

//1.找到指定目录的所有文件
function getRouteFiles(filePath){                   //getRouteFiles：获取参数  filePath：参数
    // 如果没有传入参数，默认查找目录为当前目录
    let tmpPath=filePath || __dirname               //tmpPath(路径)  =  filePath(当前路径) 或 __dirname(根目录/绝对路径)
    // 读取目录下所有文件或者文件夹
    let files=fs.readdirSync(tmpPath)
//2.过滤筛选是路由定义文件的JS文件，（以.js结尾，并且不能是index.js文件）
    let routeFiles=files.filter(item=>{             //routeFiles:过滤后的文件
        return item.endsWith('.js') && item !== 'index.js'
    })
    //返回多余的路由定义文件(数组)
    return routeFiles
}

function registerRoute(router,routeFiles){        //registerRoute:注册路由
//3.遍历路由定义文件
    routeFiles.forEach(item => {
        // 拼接路由文件的完整路径
        let tmpPath=__dirname+'/'+item
//4.引入路由定义模块/文件
        let obj=require(tmpPath)
//5.遍历引入模块对象（其实就是遍历js对象的属性），分别拿到对象的健和值，再用模块进行路由注册
        for(let key in obj){
            // key是一个字符串 类似get /user的形式
            // 可以借助字符串函数split 分割为数组
            let tmpArr=key.split(' ')
            let routeUrl=tmpArr[1]
            let routeMethod=tmpArr[0]
            let routeFunction=obj[key]
            if(routeMethod==='get'){      //暴露函数：'get /product':fn_index,
                router.get(routeUrl,routeFunction)
            }else if(routeMethod==='post'){
                router.post(routeUrl,routeFunction)
            }else if(routeMethod==='put'){
                router.put(routeUrl,routeFunction)
            }else if(routeMethod==='delete'){
                router.delete(routeUrl,routeFunction)
            }else{
                 //如果是其它功能就没有任何操作
            }
        }
    });
    return router.routes()
}

module.exports=function(){
    let routeFiles=getRouteFiles()
    let fn=registerRoute(router,routeFiles)
    return fn    
}